package com.bookocean.domain.service;

import com.bookocean.controller.dto.BookDto;
import com.bookocean.controller.dto.BookQuoteDto;
import com.bookocean.domain.dto.BookCoverDto;

import java.util.List;

/**
 * 书籍领域服务
 * 
 * @author BookOcean
 * @since 2024-01-01
 */
public interface BookDomainService {

    BookDto getBookInfoByName(String title);

    /**
     * 根据书名模糊搜索书籍列表
     * 
     * @param title 书名关键词
     * @return 书籍列表
     */
    List<BookDto> searchBooksByName(String title);

    BookDto saveBookInfo(BookDto bookDto);

    BookDto getBookById(Long bookId);

    /**
     * 根据书籍ID查询增强的书籍信息（包含统计数据和用户交互状态）
     * 
     * @param bookId 书籍ID
     * @param userId 当前用户ID（用于查询用户交互状态，可为null）
     * @return 增强的书籍信息，如果不存在返回 null
     */
    BookDto getEnhancedBookById(Long bookId, Long userId);

    BookQuoteDto saveQuoteInfo(BookQuoteDto bookQuoteDto);

    /**
     * 获取我的书摘列表
     */
    List<BookQuoteDto> getUserQuotes(Integer page, Integer pageSize, Long userId);

    /**
     * 根据类型获取封面素材列表
     * 
     * @param imageType 图片类型
     * @param userId 用户ID
     * @return 封面素材列表
     */
    BookCoverDto[] getCoversByType(Integer imageType, String userId);

    /**
     * 保存封面素材
     * 
     * @param coverDto 封面素材信息
     * @return 保存后的封面素材
     */
    BookCoverDto saveCover(BookCoverDto coverDto);
}
